#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ЗагрузитьНастройкиПользователя();
	
	Если Лев(ИмяФормы,9) = "Обработка" Тогда
		ИмяОбработки = "Обработка.ОбработкаДанных";
	Иначе
		ИмяОбработки = "ВнешняяОбработка.ОбработкаДанных";		 
	КонецЕсли;
	
	ОбновитьДеревоМетаданныхНаСервере();

КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	Если ИмяСобытия = "ОбработкаДанных.Настройки" Тогда
		ЗаполнитьЗначенияСвойств(Настройки, Параметр);
		ОбновитьДеревоМетаданныхНаСервере(СтрокаПоискаМетаданных);	
	КонецЕсли;
	
	СохранитьНастройкиПользователя();
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура СтрокаПоискаМетаданныхПриИзменении(Элемент)
	
	ОбновитьДеревоМетаданныхНаСервере(СтрокаПоискаМетаданных);
	
	Если СокрЛП(СтрокаПоискаМетаданных) <> "" Тогда
		
		ТипыМетаданных = ДеревоМетаданных.ПолучитьЭлементы();	
		Для Каждого ТипМетаданных Из ТипыМетаданных Цикл
			ИдентификаторСтроки = ТипМетаданных.ПолучитьИдентификатор();
			Элементы.ДеревоМетаданных.Развернуть(ИдентификаторСтроки);	
		КонецЦикла;
			
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоМетаданных

&НаКлиенте
Процедура ДеревоМетаданныхВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	Если Лев(Элемент.ТекущиеДанные.ИмяОбъектаМетаданных, 10) <> "Константа." Тогда
		ОткрытьФорму(Элемент.ТекущиеДанные.ИмяОбъектаМетаданных + ".ФормаСписка");
	Иначе
		ПараметрыОткрытия = Новый Структура();
		ПараметрыОткрытия.Вставить("ИмяОбъектаМетаданных", Элемент.ТекущиеДанные.ИмяОбъектаМетаданных); 
		ОткрытьФорму(ИмяОбработки + ".Форма.СвойстваКонстанты", ПараметрыОткрытия);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ДеревоМетаданныхПриАктивизацииЯчейки(Элемент)
	
	ОбновитьКонтекстноеМенюДереваМетаданных(Элемент.ТекущиеДанные.ИмяОбъектаМетаданных);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура Настройки(Команда)
	
	ПараметрыОткрытия = Новый Структура("Настройки", Настройки); 
	ОткрытьФорму(ИмяОбработки + ".Форма.Настройки", ПараметрыОткрытия);

КонецПроцедуры

&НаКлиенте
Процедура СвойстваОбъектаМетаданных(Команда)
	
	ПараметрыОткрытия = Новый Структура();
	ПараметрыОткрытия.Вставить("ИмяОбъектаМетаданных", Элементы.ДеревоМетаданных.ТекущиеДанные.ИмяОбъектаМетаданных); 
	ОткрытьФорму(ИмяОбработки + ".Форма.СвойстваОбъектаМетаданных", ПараметрыОткрытия);
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

// Новые настройки пользователя
// 
// Возвращаемое значение:
//  Структура - Новые настройки пользователя:
//    * ОтображатьСинонимыМетаданныхВДереве - Булево
//    * СортироватьДеревоМетаданных - Булево
// 
&НаСервере
Функция НовыеНастройкиПользователя()
	
	СтруктураНастроек = Новый Структура;
	СтруктураНастроек.Вставить("ОтображатьСинонимыМетаданныхВДереве", Ложь);
	СтруктураНастроек.Вставить("СортироватьДеревоМетаданных", Истина);
	
	Возврат СтруктураНастроек;
		
КонецФункции

&НаСервере
Процедура ЗагрузитьНастройкиПользователя()
	
	Настройки = НовыеНастройкиПользователя();
	СохраненныеНастройки = ХранилищеОбщихНастроек.Загрузить("gitverse.ru/a2080016/DataProcessing", "Настройки");
	
	Если СохраненныеНастройки <> Неопределено Тогда
		ЗаполнитьЗначенияСвойств(Настройки, СохраненныеНастройки);	
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура СохранитьНастройкиПользователя()

	ХранилищеОбщихНастроек.Сохранить("gitverse.ru/a2080016/DataProcessing", "Настройки", Настройки);

КонецПроцедуры

&НаСервере
Процедура ОбновитьДеревоМетаданныхНаСервере(ИмяСодержит = Неопределено)
	
	ДеревоМетаданных.ПолучитьЭлементы().Очистить();
	
	МассивМетаданных = Новый Массив;
	МассивМетаданных.Добавить(Новый Структура("Имя, ИндексПиктограммы", "Константы",               1));
	МассивМетаданных.Добавить(Новый Структура("Имя, ИндексПиктограммы", "Справочники",             3));
	МассивМетаданных.Добавить(Новый Структура("Имя, ИндексПиктограммы", "Документы",               7));
	МассивМетаданных.Добавить(Новый Структура("Имя, ИндексПиктограммы", "ПланыВидовХарактеристик", 9));
	МассивМетаданных.Добавить(Новый Структура("Имя, ИндексПиктограммы", "ПланыСчетов",             11));
	МассивМетаданных.Добавить(Новый Структура("Имя, ИндексПиктограммы", "ПланыВидовРасчета",       13));
	МассивМетаданных.Добавить(Новый Структура("Имя, ИндексПиктограммы", "РегистрыСведений",        15));
	МассивМетаданных.Добавить(Новый Структура("Имя, ИндексПиктограммы", "РегистрыНакопления",      17));
	МассивМетаданных.Добавить(Новый Структура("Имя, ИндексПиктограммы", "РегистрыБухгалтерии",     19));
	МассивМетаданных.Добавить(Новый Структура("Имя, ИндексПиктограммы", "РегистрыРасчета",         21));
	МассивМетаданных.Добавить(Новый Структура("Имя, ИндексПиктограммы", "БизнесПроцессы",          23));
	МассивМетаданных.Добавить(Новый Структура("Имя, ИндексПиктограммы", "Задачи",                  25));
	
	Для Каждого СтруктураМетаданных Из МассивМетаданных Цикл
		ДобавитьМетаданныеВДерево(СтруктураМетаданных, ИмяСодержит);			
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Процедура ДобавитьМетаданныеВДерево(СтруктураМетаданных, ИмяСодержит = Неопределено)
	
	ТаблицаМетаданных = Новый ТаблицаЗначений;
	ТаблицаМетаданных.Колонки.Добавить("Представление");
	ТаблицаМетаданных.Колонки.Добавить("Метаданные");
	
	Для Каждого ОбъектМетаданных Из Метаданные[СтруктураМетаданных.Имя] Цикл
		
		Если Настройки.ОтображатьСинонимыМетаданныхВДереве Тогда
			Представление = ОбъектМетаданных.Синоним;
		Иначе
			Представление = ОбъектМетаданных.Имя;
		КонецЕсли;
		
		Если ИмяСодержит = Неопределено Или СтрНайти(ВРег(Представление), ВРег(ИмяСодержит)) > 0 Тогда
			НоваяСтрока = ТаблицаМетаданных.Добавить();
			НоваяСтрока.Представление = Представление;
			НоваяСтрока.Метаданные = ОбъектМетаданных;
		КонецЕсли;
			
	КонецЦикла;
	
	Если Настройки.СортироватьДеревоМетаданных Тогда
		ТаблицаМетаданных.Сортировать("Представление");
	КонецЕсли;
	
	Если ТаблицаМетаданных.Количество() > 0 Тогда
	
		ТипыМетаданных = ДеревоМетаданных.ПолучитьЭлементы();
		ТипМетаданных = ТипыМетаданных.Добавить();
		ТипМетаданных.Имя = СтруктураМетаданных.Имя;
		ТипМетаданных.Пиктограмма = СтруктураМетаданных.ИндексПиктограммы;
		
		ЭлементыМетаданных = ТипМетаданных.ПолучитьЭлементы();
		Для Каждого ОбъектМетаданных Из ТаблицаМетаданных Цикл
			
			ЭлементМетаданных = ЭлементыМетаданных.Добавить();
			ЭлементМетаданных.Имя = ОбъектМетаданных.Представление;
			ЭлементМетаданных.Пиктограмма = СтруктураМетаданных.ИндексПиктограммы;
			ЭлементМетаданных.ИмяОбъектаМетаданных = ОбъектМетаданных.Метаданные.ПолноеИмя();
			
		КонецЦикла;

	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ОбновитьКонтекстноеМенюДереваМетаданных(ИмяОбъектаМетаданных)
	
	Элементы.ДеревоМетаданныхКонтекстноеМенюСвойстваОбъектаМетаданных.Видимость = ИмяОбъектаМетаданных <> "";
	
КонецПроцедуры

#КонецОбласти